home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / magrex / tate.asm < prev    next >
Assembly Source File  |  1991-10-18  |  2KB  |  161 lines

  1. ;  tate.asm 91.03.30
  2. ;  copyright(c)1991 K.Kurosaki 
  3.  
  4.                 .386p
  5.  
  6. p_get        macro    x,y
  7.         mov    ebx,y
  8.         mov    edx,x
  9.         call    p_get00
  10.         endm
  11.  
  12. p_put        macro    x,y
  13.         mov    ebx,y
  14.         mov    edx,x
  15.         call    p_put00
  16.         endm
  17.  
  18. code            segment    dword public ER use32 'CODE'
  19.                 assume     cs:CODE,ds:CODE
  20.  
  21. tate            proc    near
  22.  
  23.         mov    ebp,esp
  24.  
  25.         mov    eax,[ebp+4]    ; 第一パラメータ x
  26.         add    eax,[ebp+12]    ; 
  27.         cmp    eax,1024
  28.         jae    tate30
  29.  
  30.         mov    eax,[ebp+8]    ; 第二パラメータ y
  31.         add    eax,[ebp+12]    ; 
  32.         cmp    eax,512
  33.         jae    tate30
  34.         
  35.         mov    ax,1ch
  36.         mov    es,ax
  37.  
  38.         mov    eax,[ebp+4]
  39.         mov    c_ix,eax
  40.         add    eax,[ebp+12]
  41.         mov    c_nix,eax
  42.  
  43.         mov    eax,[ebp+8]
  44.         mov    c_iy,eax
  45.         add    eax,[ebp+12]
  46.         mov    c_niy,eax
  47.  
  48.         mov    ecx,[ebp+12]
  49.         shr    ecx,1
  50.         mov    edi,[ebp+12]
  51. tate10:
  52.         push    ecx
  53.         mov    eax,c_ix
  54.         mov    c_jx,eax
  55.  
  56.         mov    eax,c_iy
  57.         mov    c_jy,eax
  58.  
  59.         mov    eax,c_nix
  60.         mov    c_njx,eax
  61.  
  62.         mov    eax,c_niy
  63.         mov    c_njy,eax
  64.             
  65.         mov    ecx,edi
  66. tate20:
  67.         call    tate_sub
  68.  
  69.         loop    tate20
  70.  
  71.         inc    c_ix
  72.         inc    c_iy
  73.         dec    c_nix
  74.         dec    c_niy
  75.  
  76.         dec    edi
  77.         dec    edi
  78.         pop    ecx
  79.         loop    tate10
  80. tate30:
  81.         ret
  82. tate        endp
  83.  
  84. tate_sub    proc    near
  85.         mov    esi,offset p_buf
  86.         p_get    c_njx,c_iy        ; p1
  87.         p_get    c_ix ,c_jy        ; p2
  88.         p_get    c_jx ,c_niy        ; p3
  89.         p_get    c_nix,c_njy        ; p4
  90.  
  91.         p_put    c_njx,c_iy        ; p4
  92.         p_put    c_nix,c_njy        ; p3
  93.         p_put    c_jx ,c_niy        ; p2
  94.         p_put    c_ix ,c_jy        ; p1
  95.  
  96.         inc    c_jx
  97.         inc    c_jy
  98.         dec    c_njx
  99.         dec    c_njy
  100.         ret
  101. tate_sub    endp
  102.  
  103. p_get00        proc     near
  104.         shl    ebx,9
  105.         shr    edx,1
  106.         jc    p_get10
  107.  
  108.         add    ebx,edx
  109.         mov    al,es:[ebx]
  110.         and    al,0fh
  111.         mov    [esi],al
  112.         inc    esi
  113.         ret
  114. p_get10:
  115.         add    ebx,edx
  116.         mov    al,es:[ebx]
  117.         shr    al,4
  118.         mov    [esi],al
  119.         inc    esi
  120.         ret
  121. p_get00        endp
  122.  
  123. p_put00        proc     near
  124.         dec    esi
  125.         mov    al,[esi]
  126.  
  127.         shl    ebx,9
  128.         shr    edx,1
  129.         jc    p_put10
  130.  
  131.         add    ebx,edx
  132.         mov    ah,es:[ebx]
  133.         and    ah,0f0h
  134.         or    al,ah
  135.         mov    es:[ebx],al
  136.         ret
  137. p_put10:
  138.         add    ebx,edx
  139.         mov    ah,es:[ebx]
  140.         and    ah,0fh
  141.         shl    al,4
  142.         or    al,ah
  143.         mov    es:[ebx],al
  144.         ret
  145. p_put00        endp
  146.  
  147. c_ix        dd    ?
  148. c_iy        dd    ?
  149. c_nix        dd    ?
  150. c_niy        dd    ?
  151.  
  152. c_jx        dd    ?
  153. c_jy        dd    ?
  154. c_njx        dd    ?
  155. c_njy        dd    ?
  156.     
  157. p_buf        db    4 dup(?)
  158.  
  159. CODE            ends
  160.                 end
  161.